﻿\documentclass[9pt,a4paper]{article}
\usepackage[utf8]{inputenc} 
\usepackage[T1]{fontenc}
\usepackage[austrian,english]{babel}
\usepackage{geometry}
\usepackage{graphicx}
\usepackage{fancyhdr}
\usepackage{color}                                    % Farben
\usepackage[table]{xcolor}
\usepackage{colortbl}                                % Farbige Tabellen
\usepackage{longtable}                            % Tabellen, die mehrere Seiten lang sind
\usepackage{booktabs}                            % Tabellenlinien
\usepackage{tabularx}                            % Tabellen mit X-Spalte
\usepackage{tocstyle}
\usepackage{caption}
\usepackage{listings}

%\selectlanguage{english}
\selectlanguage{austrian}

%linksbündige caption und Abb als Text
\captionsetup[figure]{singlelinecheck=off}
\addto\captionsnaustrian{%
  \renewcommand{\figurename}{Abb.}%
  \renewcommand{\tablename}{Tab.}%
} 

%punkte für Inhaltsverzeichnis
\usetocstyle{allwithdot}

%befohlene Schriftart... obs funktioniert weiß ich nicht ich kenne verdana nicht
\fontfamily{verdana}\selectfont 
%\definecolor{black}{rgb}{1,1,1}
%welche Kopf und fusszeilen möchten wir
\pagestyle{fancy}
\pagenumbering{arabic}
\fancyfoot{}
\cfoot{}

\renewcommand{\familydefault}{\sfdefault}

%für die extra-schöne Titel-Logo-darstellung aber vor allem für die extra genaue positionierung
\makeatletter
%%Der Text der als beipack-text gelten soll (der kleine auf Titelseite)
\newcommand{\titeltext}{\noindent In der ersten Einheit soll das Netzwerk und seine grundlegenden Komponenten eingerichtet werden. Als Router wird zunächst ein Linux-Rechner verwendet. Außerdem wurden Security-Scans und Angriffe im weiteren Verlauf der Übung ausgeführt.}

%%Das Deckblatt wird erzeugt
\newcommand{\deckblatt}{\begin{titlepage}
\thispagestyle{fancy}
\topmargin-1.2cm
\fancyhead{\hspace*{-2.3cm}\includegraphics[scale=0.119]{images/fh_header_doc.jpg}}
\renewcommand{\headrulewidth}{0pt}
\vspace*{6cm}
\hspace*{0cm}{\LARGE \textbf{\@title}}
\newline \newline \newline
{%\small
 \titeltext}
\vfill
\footskip-1.2cm
\fancyfoot[L]{Erstellt von: \@author\\Freigegeben am: \@date}
\fancyfoot[R]{\thepage}
\end{titlepage}}


% für die > - Aufzählungszeichen
\renewcommand{\labelitemi}{>}
\renewcommand{\labelitemii}{>}
\renewcommand{\labelitemiii}{>}

%std. Eingaben
\title{SecLab - 1. Übungseinheit}
\author{Reinhard Kugler, Michael Dum}
\date{\today}

%setze zeilenabstand auf 13 und absatz auf 4
\setlength{\baselineskip}{13pt}
\setlength{\parskip}{4pt}
\setlength{\parindent}{0pt}


\begin{document}
\deckblatt
\normalsize
\topmargin-1.2cm
\footskip1.2cm
%reset der kopf und fuss zeilen und Seitenzahlen
\fancyhf{}	
\renewcommand{\headrulewidth}{0pt}
\fancyfoot[L]{Erstellt von: \@author \\ Freigegeben am: \@date}
\setcounter{page}{2}
\fancyfoot[R]{\thepage}

%inhaltsverzeichnis
\tableofcontents
\newpage

%ab hier gehts los
	\section{Netzwerk-Aufbau}
Ziel der ersten Einheit ist es einen Netzwerkplan zu erstellen, der drei Netze
beinhält:
\begin{itemize}
	\item eine LAN, in dem sich zwei Clients befinden
	\item eine DMZ, worin sich z.B. ein Webserver befindet
	\item ein externes (untrusted) Netzwerk, in dem sich ein Angreifer befindet
\end{itemize}
	
In der DMZ wird ein Webserver installiert, der aus jedem Netzwerk zugreifbar
ist. Ein Netzwerkmanagement-Server wird im LAN installiert, wo in Zukunft die
Syslog und SNMP-Meldungen der einzelnen Geräte gesammelt werden. 
Es soll ein Netzwerk- und IP-Adressplan erstellt werden, worin die
verschiedenen Netze und Geräte abgebildet sind. Der für diese Übung
erstellte Netzwerkplan ist in Abbildung \ref{fig:Netzplan1} ersichtlich.

Die einzelnen Komponenten des Netzwerks werden in der Folge nun genauer dokumentiert.

\begin{figure}[h!]
	\centering
		\includegraphics{Netzplan.png}
	\caption{Netzplan1}
	\label{fig:Netzplan1}
\end{figure}


\subsection{WebServer}
Der Webserver wird in der DMZ betrieben. Die Netzwerkeinstellungen des Servers
wurden wie folgt umgesetzt:

\begin{tabular}{lcr}
	IP-Adresse & 172.16.10.5 \\
	Subnetz-Maske & 255.255.255.0 \\
	Default Gateway & 172.16.10.1 \\
	DNS-Server & 172.16.10.1 \\
\end{tabular}

Als Betriebssystem wurde Windows Server 2003 aus dem vulnerable-Verzeichnis
gewählt, um Angriffe gegen den Server später besser nachstellen zu können.

Als Webserver wurde XAMPP 1.6.7 (Apache) gewählt. Diese Version ist ebenfalls
etwas älter, was Angriffe erleichtert. XAMPP ist darüber hinaus generell sehr
offen gehalten und hat nur wenig Security-Features standardmäßig aktiviert.

\subsection{Angreifer}
In diesem Szenario wird ein fiktiver Angreifer auf einem PC im
untrusted-Netz angenommen. Der Angreifer soll die Möglichkeit haben sich mittels einem
Netzwerkscan ein Bild über den aktuellen Zustand des Netzwerkes machen zu
können. Im nächsten Schritt werden die Geräte im Netzwerk gezielt auf
Schwachstellen überprüft. Im letzten Schritt wird versucht die bestehenden
Sicherheitslücken auszunutzen und damit die Kontrolle über die jeweilige
Maschine zu erlangen. Diese beiden Schritte werden im Kapitel \ref{sec:pentest}
näher erklärt.

Zu diesem Zweck wird eine Maschine wie folgt vorbereitet.
Der Rechner des Angreifers wird mit Lubuntu 10.10 installiert. Dieses ist
bereits als virtuelle Maschine vorbereitet. Die Software für die Arbeit
des Angreifers ist noch einzurichten, doch zunächst ist die
Netzwerkkonfiguration des Rechners zu erstellen. Dieser Rechnet befindet sich im
untrusted Netzwerk und wird mit folgenden Einstellungen konfiguriert:

\begin{tabular}{lcr}
	IP-Adresse & 172.16.30.5 \\
	Subnetz-Maske & 255.255.255.0 \\
	Default Gateway & 172.16.30.1 \\
	DNS-Server & 172.16.30.1 \\
\end{tabular}

Der DNS-Server hat keine Einschränkungen im zugreifenden Adressbereich und kann
daher verwendet werden.

Der Angreifer-PC wird mit NMAP zum Netzwerkscan, mit Wireshark zur
Paket-Analyse, Nessus zum Auffinden von Schwachstellen und Metasploit zur gezielten Ausnutzung
einer Schwachstelle ausgestattet.

NMAP und Wireshark können recht einfach durch \textit{apt-get install}
installiert werden. Auf die Installation und Einrichtung von Nessus und
Metasploit wird nun näher eingegangen.

\subsubsection{Nessus}
Für Nessus ist ein .deb-File auf der offiziellen Homepage für die Installation
verügbar (von\newline \textit{http://www.nessus.org/nessus/intro.php}
heruntergeladen). Um Nessus verwenden zu können, muss zuvor eine Lizenz-Schlüssel erworben werden. Dafür ist
eine kostenlose Registrierung und die Eingabe dieses Befehls nötig:
\begin{verbatim}
/opt/nessus/bin/nessus-fetch --register 1B56-AAB9-EB92-8D60-4293
\end{verbatim}

Nessus läd dann die neuesten Plugins, die für den Pentest benötigt werden, herunter. 
Anschlie\ss end sollte \verb|/opt/nessus/sbin/nessus-adduser| ausgeführt werden.
Mit diesem Befehl wird ein User für das Web-Interface definiert.
Für diese Übung wird tester:tester als Username:Passwort verwendet.

Der Nessus-Daemon wird über die Konsole mit folgendem Befehl gestartet: 
\begin{verbatim}
/etc/init.d/nessusd start
\end{verbatim}

\subsubsection{Metasploit}
Zur Installation von Metasploit müssen zuvor folgende abhängige Packete
installiert werden. Für den Betrieb von Nessus ist auch eine
funktionsfähige Java-Runtime-Umgebung, sowie die Ruby-Interpreter/Compiler
erforderlich.

\begin{verbatim}
sudo apt-get install ruby libopenssl-ruby libyaml-ruby libdl-ruby libiconv-ruby libreadline-ruby irb ri rubygems
sudo apt-get install subversion
sudo apt-get install build-essential ruby-dev libpcap-dev 
\end{verbatim}

Danach wird von der Metasploit-Seite der aktuellste Tarball heruntergeladen und
mit den folgenden Befehlen das Archiv entpackt, an den richtigen Ort verschoben und im \verb|/opt/|-Verzeichnis eingerichtet:
\begin{verbatim}
tar xf framework-3.5.2.tar.bz2
sudo mkdir -p /opt/metasploit3
sudo cp -a msf3/ /opt/metasploit3/msf3
sudo chown root:root -R /opt/metasploit3/msf3
sudo ln -sf /opt/metasploit3/msf3/msf* /usr/local/bin/
\end{verbatim}

Die Verwendung dieser beiden Tools wird später in Abschnitt \ref{sec:pentest}
genauer gezeigt.

\subsection{Netzwerkmanagement}
Der Netzwerkmanagement-Server wird im LAN-Netz betrieben. Die
Netzwerk-Konfiguration ist wie folgt:

\begin{tabular}{lcr}
	IP-Adresse & 172.16.20.7 \\
	Subnetz-Maske & 255.255.255.0 \\
	Default Gateway & 172.16.20.1 \\
	DNS-Server & 172.16.20.1 \\
\end{tabular}

Generell wäre ein eigenes Management-Netz/Management-VLAN wünschenswert, jedoch wurde auf Grund
der Anforderungen an die vorhandenen Netze das Netzwerkmanagement wie
erwähnt in das LAN gestellt. In weiteren Übungen wäre es jedoch durchaus
denkbar den Netzwerkmanagement-Server in ein eigenes Netzwerk hinter eine
Firewall zu stellen, um diese unserer Meinung nach kritische Infrastruktur
besser zu schützen. 
Als Betriebssystem des Servers wurde Lubuntu 10.10 verwendet und OpenNMS als Netzwerkmanagement-Software.


Um OpenNMS einzurichten sind folgende Schritte nötig:
\begin{itemize}
	\item Repository hinzufügen
	\item PostgreSQL einrichten
\end{itemize}

\textbf{Repository hinzufügen}\newline
Um OpenNMS über den Paketmanager installieren und aktualisieren zu können, muss
zuvor das Repository eingerichtet werden. 
Im Ordner /etc/apt/sources.list.d wird eine Datei opennms.list erzeugt und
folgende Paketquellen ergänzt:
\begin{verbatim}
deb http://debian.opennms.org stable main
deb-src http://debian.opennms.org stable main
\end{verbatim}
Anschließend muss der Public-Key importiert werden, mit dem die Pakete des
Repositories signiert sind. Der Befehl dazu lautet:
\begin{verbatim}
wget -O - http://debian.opennms.org/OPENNMS-GPG-KEY | sudo apt-key add -
\end{verbatim}

Anschlie\ss end kann mit \textit{apt-get update} das Repository aktualisiert
werden und mit \textit{apt-get install opennms} OpenNMS installiert werden.

\textbf{PostgreSQL einrichten}\newline
Die Datei \verb|/etc/postgresql/8.4/main/pg_hba.conf| muss so angepasst werden,
dass PostgreSQL Verbindungen vom Localhost standardm\ss ig zulässt. OpenNMS
kann sonst nicht auf die Datenbank zugreifen. Die Config sollte so aussehen (ganz unten zu finden):
\begin{verbatim}
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
# "local" is for Unix domain socket connections only
local   all         all                               trust
# IPv4 local connections:
host    all         all         127.0.0.1/32          trust
# IPv6 local connections:
host    all         all         ::1/128               trust
\end{verbatim}

Anschließend wird die Datenbanksoftware PostgreSQL mit dem Befehl
\textit{service postgresql-8.4 restart} neu gestartet, damit die
Änderungen übernommen. 

Nun wird die Datenbank angelegt, auf der opennms arbeitet.
\begin{verbatim}
 sudo -u postgres createdb -U postgres -E UNICODE opennms
 psql -U postgres --host=localhost opennms
 sudo -u postgres install_iplike.sh
 sudo /usr/share/opennms/bin/runjava -s
 sudo /usr/share/opennms/bin/runjava  -S /usr/java/jdk1.5.0_12/bin/java
\end{verbatim}

Wurde alles richtig eingeben, kann nun der Installer mit \verb|sudo /usr/share/opennms/bin/install -dis| gestartet werden.
Nach der Installation kann OpenNMS mit \verb|service opennms start| gestartet
werden. Die Oberfläche des Netzwerkmanagement-Servers findet sich unter http://172.16.20.7:8980/opennms. Username und Passwort lauten "admin".

\subsection{Clients}
Im LAN wurden zwei Clients eingerichtet. Client 1 verwendet Windows XP und hat
die IP-Adresse 172.16.20.5/24. Client 2 verwendet Ubuntu 8.04 und hat die IP-Adresse 172.16.20.6/24. 
Beide Systeme sind durch ihre alten Betriebssysteme und niedrige Patchlevel verwundbar und werden im nächsten Kapitel analysiert.

Client 1 (Windows XP)
\begin{tabular}{lcr}
	IP-Adresse & 172.16.20.5 \\
	Subnetz-Maske & 255.255.255.0 \\
	Default Gateway & 172.16.20.1 \\
	DNS-Server & 172.16.20.1 \\
\end{tabular}

Client 2 (Ubuntu 8.04)
\begin{tabular}{lcr}
	IP-Adresse & 172.16.20.6 \\
	Subnetz-Maske & 255.255.255.0 \\
	Default Gateway & 172.16.20.1 \\
	DNS-Server & 172.16.20.1 \\
\end{tabular}

\subsection{Router}
\input{router.tex}

\section{PenTesting}
\label{sec:pentest}
In diesem Abschnitt wurden nun versucht die beiden Client-Rechner und den
Web-Server aus dem untrusted-Netzwerk unter fremde Kontrolle zu bringen. Die
zuvor installierten Tools Nessus und Metasploit kommen hier zu Einsatz.

\subsection{Nessus}
Für die Verwendung von Nessus muss ein Browser mit Flash-Support installiert
sein. Anschließend kann man https://127.0.0.1:8834 aufrufen, um die grafische
Oberfläche zu starten. Als Username/Passwort haben wir hier tester:tester
gewählt. Nach dem Login muss zunächst eine neue Policy angelegt werden. Wichtig
ist dabei vor allem, dass die Plugins auf das gewünschte Ziel angepasst werden.

Es werden zwei Scan-Profile erstellt. Das erste enthält alle Windows
relevanten Plugins und wurde anschließend zum Testen des Windows XP Clients und
des Windows Server 2003 Rechners verwendet. 
Danach wurde ein zweites Profil mit relevanten Plugins für den Linux-Client
erstellt und dieser damit getestet. 

Die Scan-Ergebnisse sind in den folgenden Aufzählungen ersichtlich.

Die Auswertung des Scans von Webserver (172.16.10.5) zeigte folgende als "high" bewertete Schwachstellen:
\begin{enumerate}
	\item alte Apache (<2.2) und PHP-Versionen (<5.2) sind installiert
	\item die XAMPP Example-Seite ist zugreifbar
	\item MS08-067 Exploit möglich (Conficker)
	\item Samba-Schwachstellen MS09-001, MS05-027
	\item MS06-040, MS06-035
\end{enumerate}

Für den Windows XP Client2 (172.16.20.5) konnten folgende kritische
Schwachstellen entdeckt werden:
\begin{enumerate}
  \item MS08-067 Exploit möglich (Conficker)
  \item Samba-Schwachstellen MS09-001, MS05-027
  \item MS06-040, MS06-035
\end{enumerate}

Für den Ubuntu 8.04 Client 2 (172.16.20.6) gab es keine high oder medium,
sondern nur mit low bewertete Schwachstellen:
\begin{enumerate}
	\item traceroute information
	\item Datum kann herausgefunden werden
\end{enumerate}

Mit Hilfe dieser Übersicht fällt es nun wesentlich leichter im nächsten Schritt
einen eigneten Exploit für die Ziel-Maschinen auszuwählen.

\input{metasploit.tex}

\end{document}

